package gui;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JLabel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Color;
import java.util.LinkedList;
import java.util.List;

public class Nivel extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JPanelConFondo fondo;
	private int anchoCasillero;
	private int[] techo;
	private List<JLabel> listaLabels;
	private Supervisor sup;
	private Perdiste p;
	private JTextField lblVidas;
	JButton botonMenu;
	JPanel menuPanel;
	boolean ab;
	boolean colocarTorre;
	private JToggleButton menuT;
	private JTextField lblNewLabel, lblMana;
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Nivel frame = new Nivel();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Nivel() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(25, 25, 1000,730);
		setResizable(false);
		ab=true;
		colocarTorre=false;
		p = new Perdiste(this.getWidth()/2 - 100,this.getHeight()/2 - 100);
		techo = new int[5];
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new GridLayout(1, 0, 0, 0));
		contentPane.addMouseListener(new MouseListener() 
				{
				@Override
				public void mouseReleased(MouseEvent e) 
				{
				}
				
				@Override
				public void mousePressed(MouseEvent e) 
				{
				}
				
				@Override
				public void mouseExited(MouseEvent e) 
				{
				}
				
				@Override
				public void mouseEntered(MouseEvent e) 
				{
				}
				
				@Override
				public void mouseClicked(MouseEvent e) 
				{
					if(colocarTorre)
					{
						if ((e.getX()/100 < 6))
						{
							int columna = e.getX()/100;
							int fila = e.getY()/140;
							sup.crearUnidad(new JLabel(), 11, fila, columna);
							modificarMana(sup.mana());
							repaint();
						}
					}
				}
				
			}
		);
		
		fondo = new JPanelConFondo("/imagenes/fondo.jpg");
		contentPane.add(fondo);
		fondo.setLayout(null);
		
		inicializarTecho();
		sup = new Supervisor(this);
		listaLabels = new LinkedList<JLabel>();
		anchoCasillero = getWidth()/10;
		sup.iniciarThreads();
		
		lblVidas = new JTextField();
		lblVidas.setText("Vidas = " + sup.cantVidas());
		lblVidas.setEditable(false);
		lblVidas.setFont(new Font("Tahoma", Font.BOLD, 17));
		lblVidas.setHorizontalAlignment(SwingConstants.CENTER);
		lblVidas.setForeground(Color.BLACK);
		lblVidas.setBackground(Color.RED);
		lblVidas.setBounds(697, 18, 112, 23);
		fondo.add(lblVidas);
		
		botonMenu = new JButton(">");
		
		botonMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
				{	
						if(ab)
							moverMenuDer();
						else
							moverMenuIzq();

					ab = !ab;
					if(botonMenu.getText().equals(">"))
						botonMenu.setText("<");
					else
						botonMenu.setText(">");
					
					
			}
		});
		
		botonMenu.setBounds(0, 20, 44, 25);
		fondo.add(botonMenu);
		
		menuPanel = new JPanel();
		menuPanel.setBounds(-60, 0, 60, 83);
		fondo.add(menuPanel);
		menuPanel.setLayout(new GridLayout(0, 1, 0, 0));
		
		lblMana = new JTextField("Mana = "+sup.mana());
		lblMana.setFont(new Font("Tahoma", Font.BOLD, 17));
		lblMana.setBackground(Color.RED);
		lblMana.setBounds(341, 19, 141, 23);
		fondo.add(lblMana);
		
		menuT = new JToggleButton("");
		menuPanel.add(menuT);
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource("imagenes/torre.gif"));
		menuT.setIcon(imagen);
		
		lblNewLabel = new JTextField("Puntos = "+sup.puntuacion());
		lblNewLabel.setBackground(Color.RED);
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 17));
		lblNewLabel.setBounds(520, 19, 127, 23);
		fondo.add(lblNewLabel);
		
		menuT.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				colocarTorre = !colocarTorre;
			}
		});
	}

	public void modificarMana(float m)
	{
		lblMana.setText("Mana = "+m);
	}
	
	public void modificarPunt(int p)
	{
		lblNewLabel.setText("Puntos = "+p);
	}
	
	private void inicializarTecho()
	{
		int t = (getHeight()-30) / 5;
		int tope = getHeight() - t;
		for(int i=4; i >= 0;i--)
		{
			techo[i]=tope;
			tope = tope - t;
		}
	}
	
	public JLabel crearEnemigo(int i, JLabel enemigo)
	{
		String nombre = enemigo.getText();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(nombre+".gif"));
		enemigo.setBounds(getWidth(),techo[i],imagen.getIconWidth(), 125);
		enemigo.setIcon(imagen);
		fondo.add(enemigo);
		listaLabels.add(enemigo);
		return enemigo;
	}
	
	public JLabel nuevaTorre(int j, int i, JLabel enemigo)
	{
		enemigo.setText("imagenes/torre");
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource("imagenes/torre.gif"));
		enemigo.setBounds((100*(j+1))-imagen.getIconWidth(),techo[i]+imagen.getIconHeight(),imagen.getIconWidth(), imagen.getIconHeight());
		enemigo.setIcon(imagen);
		fondo.add(enemigo);
		listaLabels.add(enemigo);
		return enemigo;
	}
	
	public void perder(String s)
	{
		p.setGUI(this);	
		p.setText(s);
		p.setVisible(true);
	}
	
	public int anchoDeCasillero()
	{
		return anchoCasillero;
	}
	
	public void quitarLabel(JLabel label)
	{
		listaLabels.remove(label);
		label.setVisible(false);
		label.removeAll();
		repaint();
	}
	
	public void bajarVidas()
	{
		lblVidas.setText("Vidas = " + sup.cantVidas());
	}
	
	public void volverAJugar()
	{
		for(JLabel label: listaLabels)
		{
			label.setVisible(false);
			label.removeAll();
		}
		sup.volverAJugar();
		lblVidas.setText("Vidas = " + sup.cantVidas());
	}
	
	public void agregar(JLabel l)
	{
		fondo.add(l);
		listaLabels.add(l);
	}
	
	private void moverMenuDer()
	{
		botonMenu.setLocation(botonMenu.getLocation().x+60, botonMenu.getLocation().y);
		menuPanel.setLocation(menuPanel.getLocation().x+60,menuPanel.getLocation().y);
	}
	private void moverMenuIzq()
	{
		botonMenu.setLocation(botonMenu.getLocation().x-60, botonMenu.getLocation().y);
		menuPanel.setLocation(menuPanel.getLocation().x-60,menuPanel.getLocation().y);
	}
	
	public void cambiarArma(JLabel unidad, String arma)
	{
		unidad.setText("imagenes/torre"+arma);
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource("imagenes/torre"+arma+".gif"));
		unidad.setBounds(unidad.getX(),unidad.getY(),imagen.getIconWidth(),imagen.getIconHeight());
		unidad.setIcon(imagen);
		repaint();
	}

	public void modificarLabelTorreAtacando(JLabel unidad)
	{
		String s = unidad.getText();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(s+"1.gif"));
		unidad.setBounds(unidad.getX(),unidad.getY(),imagen.getIconWidth(),imagen.getIconHeight());
		unidad.setIcon(imagen);
		repaint();
	}
	
	public void modificarLabelTorreQuietas(JLabel unidad)
	{
		String s = unidad.getText();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(s+".gif"));
		unidad.setBounds(unidad.getX(),unidad.getY(),imagen.getIconWidth(),imagen.getIconHeight());
		unidad.setIcon(imagen);
		repaint();
	}
	
	public void modificarEnemigoCaminando(JLabel enemigo)
	{
		String nombre = enemigo.getText();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(nombre+".gif"));
		enemigo.setBounds(enemigo.getX(),enemigo.getY(),imagen.getIconWidth(),imagen.getIconHeight());
		enemigo.setIcon(imagen);
	}
	
	public void modificarEnemigoAtacando(JLabel enemigo)
	{
		String nombre = enemigo.getText();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(nombre+"1.gif"));
		enemigo.setBounds(enemigo.getX(),enemigo.getY(),imagen.getIconWidth(),imagen.getIconHeight());
		enemigo.setIcon(imagen);
	}
	
	public JLabel crearDisparo(String s,int desde, int hasta, int fila)
	{
		JLabel disparo = new JLabel();
		ImageIcon imagen = new ImageIcon(getClass().getClassLoader().getResource(s+"2.gif"));
		disparo.setBounds(desde, fila, hasta-desde, 40);
		disparo.setIcon(imagen);
		fondo.add(disparo);
		repaint();
		listaLabels.add(disparo);
		return disparo;
	}
	
	public void agregarPrisionero(JLabel p)
	{
		fondo.add(p);
		repaint();
	}

	public void quitarPrisionero(JLabel p)
	{
		fondo.remove(p);
		repaint();
	}
	
	
}
